﻿using System;
using System.IO;
using System.Data;

namespace RegisterProvider
{
    /// <summary>
    /// Реализует доступ и работу с данными реестра , хранящимися в файле(ах)
    /// </summary>
    public class RegisterFileConnector : IRegister
    {
        public const string RegisterFileName = "ItemsRegister.txt";
        public const string IdentColumnName = "Ident";
        public const string PriceColumnName = "Price";

        public RegisterFileConnector()
        { 
            Load();
        }

        public DataTable RegisterTable
        {
            get; set;
        }

        /// <summary>
        ///  Записывает в таблицу данные из файла-регистра
        /// </summary>
        public DataTable Load()
        {
            RegisterTable = new DataTable();
            RegisterTable.Columns.Add(new DataColumn(IdentColumnName, Type.GetType("System.String")));
            RegisterTable.Columns.Add(new DataColumn(PriceColumnName, Type.GetType("System.Int32")));
            
            if (File.Exists(RegisterFileName) == false)
            {
                Console.WriteLine();
                return RegisterTable;
            }
            var itemsRegisterText = File.ReadAllText(RegisterFileName);
            itemsRegisterText = itemsRegisterText.Replace("\n", "");
            itemsRegisterText = itemsRegisterText.Replace("\r", "");
            var items = itemsRegisterText.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var item in items)
            {
                var itemFields = item.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                var newRow = RegisterTable.NewRow();
                var ident = itemFields[0];
                newRow[IdentColumnName] = ident;
                var price = itemFields[1];
                newRow[PriceColumnName] = price;
                RegisterTable.Rows.Add(newRow);
            }
            return RegisterTable;
        }

        /// <summary>
        /// Записывает содержимое таблицы в файл-регистр. Разделитель - ';'
        /// </summary>
        public void ApplyChanges()
        {
            var streamWriter = File.CreateText(RegisterFileName);
            foreach (DataRow row in RegisterTable.Rows)
            {
                var ident = row[IdentColumnName];
                var price = row[PriceColumnName];
                streamWriter.WriteLine(ident + " " + price + ";");
            }
            streamWriter.Close();
        }
    }
}
